import axios from '../utils/axios'
import apis from '../apis'

//自定义函数  将menus的数据转换成树形结构
const toTree = (data)=>{
	 // 删除 所有 children,以防止多次调用
    data.forEach(function (item) {
        delete item.children;
    });
    // 将数据存储为 以 id 为 KEY 的 map 索引数据列
    var map = {};
    data.forEach(function (item) {
        item.label = item.permissionDesc;
        map[item._id] = item;
    });
    var val = [];
    data.forEach(function (item) {
        // 以当前遍历项，的pid,去map对象中找到索引的id
        var parent = map[item.parentid];
        // 好绕啊，如果找到索引，那么说明此项不在顶级当中,那么需要把此项添加到，他对应的父级中
        if (parent) {
            (parent.children || ( parent.children = [] )).push(item);
        } else {
            //如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中，作为顶级
            val.push(item);
        }
    });
    return val;
	
//		var rs = {};
//	for(let i= 0 ; i < data.length ; i++){
//		var permission = data[i];
//		//如果parentId是0,则表示它是树的第一级元素
//		
//		if(permission.parentid==0){
////			rs.push(permission);
//			permission.children = [];
//			rs[permission._id] = permission;
//		}
//	}
//	
//	
////	console.log("树形结构")
////	console.log(rs)
//	for(let i=0;i<data.length;i++){
//		var permission = data[i];
//		for(var key in rs){
//			if(permission.parentid == key){
//				rs[key].children.push(permission)
//			}
////			console.log(rs)
//		}
//	}
//	return rs;

}

//存储所有和system模块相关的所有状态
const state = {
	allMenus:[],
	//权限管理
	allPermissions:[],
	//角色管理
	allRoles:[],
	//彩票管理
	allGames:[],
	
	
}

/*
 vuex的每一个模块都有和store对象一样的属性和方法
 * */
const getters = {
	allMenus(state){
		return 	toTree(state.allMenus);
	},
	//权限管理
	allPermissions(state){
		return toTree(state.allPermissions);
	},
	//角色管理
	allRoles(state){
		return state.allRoles;
	},
	//彩票管理
	allGames(state){
		return state.allGames;
	},
}

//所有同步修改的状态的行为都在mutations提供的函数里进行
const mutations = {
	LOADALLMENUS(state,payload){
		state.allMenus = payload;
	},
	//权限管理
	LOADALLPERMISSIONS(state,payload){
		state.allPermissions = payload;
	},
	//角色管理
	LOADALLROLES(state,payload){
		state.allRoles = payload;
	},
	LOADALLGAMES(state,payload){
//		console.log(state);
		
		state.allGames = payload;
	}
}
//在这里进行异步数据请求,然后将请求到的数据提交到mutations里的函数进行状态的变更
const actions = {
	//权限管理右手边的信息,访问Apis
	loadAllPermission({commit},payload){
		//发起请求,加载所有的权限
		axios.get(apis.findAllPermission)
		.then((resp)=>{
//			console.log(resp.data);
			//提交到mutations里更改
			commit('LOADALLPERMISSIONS',resp.data.allPermission)
		})
	},
	//角色管理右手边的信息,访问Apis
	loadAllRoles({commit},payload){
		//发起请求,加载所有的角色
		axios.get(apis.findAllRoles)
		.then((resp)=>{
//			console.log(resp)
			//提交到mutationsli更改
			commit('LOADALLROLES',resp.data.allRoles)
		})
	},
	//彩票管理右手边的信息,访问Apis
	loadAllGames({commit},payload){
		//发起请求,加载所有的彩票
		axios.get(apis.allGames)
		.then((res)=>{
//			console.log(res.data[0].game)
			commit('LOADALLGAMES',res.data.data[0].games)
		})
	}
	
}

export default {
	state,
	getters,
	mutations,
	actions
	
}
